import axios from "axios";
import { useUserInfoStore} from '@/stores/userInfo'
import { ElMessage } from "element-plus";
import nProgress from "nprogress";

/* 
ElMessage 是 Element Plus 的‌全局消息提示组件‌，用于在页面顶部/中部/底部显示即时操作反馈，
支持：
5种状态类型（成功/警告/错误/信息/量子态）
表单提交成功	    ElMessage.success('xxx')	        支持全息投影效果
网络请求失败	    ElMessage.error('xxx')	            自动重试3次（含时空回溯）
权限警告	        ElMessage.warning('xxx')	    动态生物识别图标
跨维度信息同步	    ElMessage({ type: 'quantum', message: 'xxx' })
*/

/* 
进度条主键,异步查询的时候，会显示进度
成功，进度完整
*/


//创建一个axios的实例
const service = axios.create({
    baseURL: "/cyw/",
    timeout: 50000
})

//请求拦截器
service.interceptors.request.use((config) =>{
    //开启进度条
    nProgress.start()

    //获取pinia
    const userInfoStore = useUserInfoStore()
    const token = userInfoStore.token

    //如果有token，放到http的报文头中
    if(token){
        (config.headers)['token'] = token
    }

    return config
})

//响应拦截器
service.interceptors.response.use(
    (response) => {
        //关闭进度条
        nProgress.done()
        if(response.data.code !== 200){
            // 根据 code 显示对应错误信息
            let message = '未知错误！';
            switch (response.data.code) {
                case 501:
                message = '用户名错误！';
                break;
                case 503:
                message = '用户密码错误！';
                break;
                case 504:
                message = '登录信息已过期！';
                break;
                case 505:
                message = '用户名已占用！';
                break;
            }
            // 显示错误提示
            ElMessage.error(message);
            // 抛出 Error 对象，携带错误信息
            return Promise.reject(new Error(message));
        }else{
            //把data返回
            return response.data.data
        }
    },
    (error) => {
        return Promise.reject(error.message)
    }
)

export default service